﻿#region Using directives
using System.Collections.Generic;
using System.Linq;
using Blazorise.Providers;
#endregion

namespace Blazorise.Icons.FontAwesome;

class FontAwesomeIconProvider : BaseIconProvider
{
    #region Members

    private static Dictionary<IconName, string> names = new()
    {
        { IconName.Add, FontAwesomeIcons.Plus },
        { IconName.Adjust, FontAwesomeIcons.Adjust },
        { IconName.Alert, FontAwesomeIcons.Bell },
        { IconName.AlertOff, FontAwesomeIcons.BellSlash },
        { IconName.AlignCenter, FontAwesomeIcons.AlignCenter },
        { IconName.AlignJustify, FontAwesomeIcons.AlignJustify },
        { IconName.AlignLeft, FontAwesomeIcons.AlignLeft },
        { IconName.AlignRight, FontAwesomeIcons.AlignRight },
        { IconName.AngleDown, FontAwesomeIcons.AngleDown },
        { IconName.AngleLeft, FontAwesomeIcons.AngleLeft },
        { IconName.AngleRight, FontAwesomeIcons.AngleRight },
        { IconName.AngleUp, FontAwesomeIcons.AngleUp },
        { IconName.Apple, FontAwesomeIcons.AppleAlt },
        { IconName.Archive, FontAwesomeIcons.Archive },
        { IconName.ArrowAltCircleDown, FontAwesomeIcons.ArrowAltCircleDown },
        { IconName.ArrowDown, FontAwesomeIcons.ArrowDown },
        { IconName.ArrowLeft, FontAwesomeIcons.ArrowLeft },
        { IconName.ArrowRight, FontAwesomeIcons.ArrowRight },
        { IconName.ArrowUp, FontAwesomeIcons.ArrowUp },
        { IconName.Baby, FontAwesomeIcons.Baby },
        { IconName.BabyCarriage, FontAwesomeIcons.BabyCarriage },
        { IconName.Backspace, FontAwesomeIcons.Backspace },
        { IconName.Backward, FontAwesomeIcons.Backward },
        { IconName.BalanceScale, FontAwesomeIcons.BalanceScale },
        { IconName.Ban, FontAwesomeIcons.Ban },
        { IconName.BandAid, FontAwesomeIcons.BandAid },
        { IconName.Bars, FontAwesomeIcons.Bars },
        { IconName.BatteryFull, FontAwesomeIcons.BatteryFull },
        { IconName.Bell, FontAwesomeIcons.Bell },
        { IconName.BellSlash, FontAwesomeIcons.BellSlash },
        { IconName.Biking, FontAwesomeIcons.Biking },
        { IconName.BirthdayCake, FontAwesomeIcons.BirthdayCake },
        { IconName.Bold, FontAwesomeIcons.Bold },
        { IconName.Bolt, FontAwesomeIcons.Bolt },
        { IconName.Book, FontAwesomeIcons.Book },
        { IconName.Bookmark, FontAwesomeIcons.Bookmark },
        { IconName.BookReader, FontAwesomeIcons.BookReader },
        { IconName.BorderAll, FontAwesomeIcons.BorderAll },
        { IconName.BorderNone, FontAwesomeIcons.BorderNone },
        { IconName.BorderStyle, FontAwesomeIcons.BorderStyle },
        { IconName.Briefcase, FontAwesomeIcons.Briefcase },
        { IconName.Brush, FontAwesomeIcons.Brush },
        { IconName.Bug, FontAwesomeIcons.Bug },
        { IconName.Building, FontAwesomeIcons.Building },
        { IconName.Bus, FontAwesomeIcons.Bus },
        { IconName.Calendar, FontAwesomeIcons.Calendar },
        { IconName.CalendarCheck, FontAwesomeIcons.CalendarCheck },
        { IconName.CalendarDay, FontAwesomeIcons.CalendarDay },
        { IconName.CalendarTimes, FontAwesomeIcons.CalendarTimes },
        { IconName.CalendarWeek, FontAwesomeIcons.CalendarWeek },
        { IconName.Camera, FontAwesomeIcons.Camera },
        { IconName.CameraRetro, FontAwesomeIcons.CameraRetro },
        { IconName.Car, FontAwesomeIcons.Car },
        { IconName.CaretSquareRight, FontAwesomeIcons.CaretSquareRight },
        { IconName.Cart, FontAwesomeIcons.ShoppingCart },
        { IconName.CartMinus, FontAwesomeIcons.CartArrowDown },
        { IconName.CartPlus, FontAwesomeIcons.CartPlus },
        { IconName.Chair, FontAwesomeIcons.Chair },
        { IconName.ChartArea, FontAwesomeIcons.ChartArea },
        { IconName.ChartBar, FontAwesomeIcons.ChartBar },
        { IconName.ChartLine, FontAwesomeIcons.ChartLine },
        { IconName.ChartPie, FontAwesomeIcons.ChartPie },
        { IconName.ChartScatter, FontAwesomeIcons.ChartGantt }, // Scatter is in the PRO
        { IconName.Check, FontAwesomeIcons.Check },
        { IconName.CheckCircle, FontAwesomeIcons.CheckCircle },
        { IconName.CheckDouble, FontAwesomeIcons.CheckDouble },
        { IconName.CheckSquare, FontAwesomeIcons.CheckSquare },
        { IconName.ChevronLeft, FontAwesomeIcons.ChevronLeft },
        { IconName.ChevronRight, FontAwesomeIcons.ChevronRight },
        { IconName.ChevronUp, FontAwesomeIcons.ChevronUp },
        { IconName.ChevronDown, FontAwesomeIcons.ChevronDown },
        { IconName.Circle, FontAwesomeIcons.Circle },
        { IconName.City, FontAwesomeIcons.City },
        { IconName.Clear, FontAwesomeIcons.Eraser },
        { IconName.ClinicMedical, FontAwesomeIcons.ClinicMedical },
        { IconName.Clipboard, FontAwesomeIcons.Clipboard },
        { IconName.Clock, FontAwesomeIcons.Clock },
        { IconName.ClosedCaptioning, FontAwesomeIcons.ClosedCaptioning },
        { IconName.Cloud, FontAwesomeIcons.Cloud },
        { IconName.CloudDownloadAlt, FontAwesomeIcons.CloudDownloadAlt },
        { IconName.CloudUploadAlt, FontAwesomeIcons.CloudUploadAlt },
        { IconName.Cocktail, FontAwesomeIcons.Cocktail },
        { IconName.Code, FontAwesomeIcons.Code },
        { IconName.Coffee, FontAwesomeIcons.Coffee },
        { IconName.Comment, FontAwesomeIcons.Comment },
        { IconName.CommentAlt, FontAwesomeIcons.CommentAlt },
        { IconName.Comments, FontAwesomeIcons.Comments },
        { IconName.CompactDisc, FontAwesomeIcons.CompactDisc },
        { IconName.Compass, FontAwesomeIcons.Compass },
        { IconName.Compress, FontAwesomeIcons.Compress },
        { IconName.Copy, FontAwesomeIcons.Copy },
        { IconName.Copyright, FontAwesomeIcons.Copyright },
        { IconName.CreditCard, FontAwesomeIcons.CreditCard },
        { IconName.Crop, FontAwesomeIcons.Crop },
        { IconName.Cut, FontAwesomeIcons.Cut },
        { IconName.Dashboard, FontAwesomeIcons.Columns },
        { IconName.Delete, FontAwesomeIcons.Trash },
        { IconName.Desktop, FontAwesomeIcons.Desktop },
        { IconName.Dice, FontAwesomeIcons.Dice },
        { IconName.Directions, FontAwesomeIcons.Directions },
        { IconName.Dog, FontAwesomeIcons.Dog },
        { IconName.DollarSign, FontAwesomeIcons.DollarSign },
        { IconName.DotCircle, FontAwesomeIcons.DotCircle },
        { IconName.Download, FontAwesomeIcons.Download },
        { IconName.Dumbbell, FontAwesomeIcons.Dumbbell },
        { IconName.Edit, FontAwesomeIcons.Edit },
        { IconName.Eject, FontAwesomeIcons.Eject },
        { IconName.Ethernet, FontAwesomeIcons.Ethernet },
        { IconName.EuroSign, FontAwesomeIcons.EuroSign },
        { IconName.Exclamation, FontAwesomeIcons.Exclamation },
        { IconName.ExclamationCircle, FontAwesomeIcons.ExclamationCircle },
        { IconName.ExclamationTriangle, FontAwesomeIcons.ExclamationTriangle },
        { IconName.Expand, FontAwesomeIcons.Expand },
        { IconName.ExpandArrowsAlt, FontAwesomeIcons.ExpandArrowsAlt },
        { IconName.ExpandLess, FontAwesomeIcons.ChevronUp },
        { IconName.ExpandMore, FontAwesomeIcons.ChevronDown },
        { IconName.ExternalLinkSquareAlt, FontAwesomeIcons.ExternalLinkSquareAlt },
        { IconName.Eye, FontAwesomeIcons.Eye },
        { IconName.EyeSlash, FontAwesomeIcons.EyeSlash },
        { IconName.FastBackward, FontAwesomeIcons.FastBackward },
        { IconName.FastForward, FontAwesomeIcons.FastForward },
        { IconName.File, FontAwesomeIcons.File },
        { IconName.FileAlt, FontAwesomeIcons.FileAlt },
        { IconName.FileDownload, FontAwesomeIcons.FileDownload },
        { IconName.FilePdf, FontAwesomeIcons.FilePdf },
        { IconName.FileUpload, FontAwesomeIcons.FileUpload },
        { IconName.Film, FontAwesomeIcons.Film },
        { IconName.Filter, FontAwesomeIcons.Filter },
        { IconName.Fingerprint, FontAwesomeIcons.Fingerprint },
        { IconName.Fire, FontAwesomeIcons.Fire },
        { IconName.Flag, FontAwesomeIcons.Flag },
        { IconName.Flask, FontAwesomeIcons.Flask },
        { IconName.Folder, FontAwesomeIcons.Folder },
        { IconName.FolderOpen, FontAwesomeIcons.FolderOpen },
        { IconName.FolderPlus, FontAwesomeIcons.FolderPlus },
        { IconName.Forward, FontAwesomeIcons.Forward },
        { IconName.Frown, FontAwesomeIcons.Frown },
        { IconName.FrownOpen, FontAwesomeIcons.FrownOpen },
        { IconName.Gamepad, FontAwesomeIcons.Gamepad },
        { IconName.GasPump, FontAwesomeIcons.GasPump },
        { IconName.Gavel, FontAwesomeIcons.Gavel },
        { IconName.Gift, FontAwesomeIcons.Gift },
        { IconName.Globe, FontAwesomeIcons.Globe },
        { IconName.Grin, FontAwesomeIcons.Grin },
        { IconName.GripLines, FontAwesomeIcons.GripLines },
        { IconName.GripVertical, FontAwesomeIcons.GripVertical },
        { IconName.HandPaper, FontAwesomeIcons.HandPaper },
        { IconName.HandsHelping, FontAwesomeIcons.HandsHelping },
        { IconName.Headphones, FontAwesomeIcons.Headphones },
        { IconName.Headset, FontAwesomeIcons.Headset },
        { IconName.Heart, FontAwesomeIcons.Heart },
        { IconName.Highlighter, FontAwesomeIcons.Highlighter },
        { IconName.History, FontAwesomeIcons.History },
        { IconName.Home, FontAwesomeIcons.Home },
        { IconName.Hospital, FontAwesomeIcons.Hospital },
        { IconName.Hotel, FontAwesomeIcons.Hotel },
        { IconName.HotTub, FontAwesomeIcons.HotTub },
        { IconName.Hourglass, FontAwesomeIcons.Hourglass },
        { IconName.IdCard, FontAwesomeIcons.IdCard },
        { IconName.Image, FontAwesomeIcons.Image },
        { IconName.Images, FontAwesomeIcons.Images },
        { IconName.Inbox, FontAwesomeIcons.Inbox },
        { IconName.Indent, FontAwesomeIcons.Indent },
        { IconName.Infinity, FontAwesomeIcons.Infinity },
        { IconName.Info, FontAwesomeIcons.Info },
        { IconName.InfoCircle, FontAwesomeIcons.InfoCircle },
        { IconName.Italic, FontAwesomeIcons.Italic },
        { IconName.Key, FontAwesomeIcons.Key },
        { IconName.Keyboard, FontAwesomeIcons.Keyboard },
        { IconName.Language, FontAwesomeIcons.Language },
        { IconName.Laptop, FontAwesomeIcons.Laptop },
        { IconName.LaptopCode, FontAwesomeIcons.LaptopCode },
        { IconName.Laugh, FontAwesomeIcons.Laugh },
        { IconName.LayerGroup, FontAwesomeIcons.LayerGroup },
        { IconName.Lightbulb, FontAwesomeIcons.Lightbulb },
        { IconName.Link, FontAwesomeIcons.Link },
        { IconName.List, FontAwesomeIcons.List },
        { IconName.ListOl, FontAwesomeIcons.ListOl },
        { IconName.ListUl, FontAwesomeIcons.ListUl },
        { IconName.LocationArrow, FontAwesomeIcons.LocationArrow },
        { IconName.Lock, FontAwesomeIcons.Lock },
        { IconName.LockOpen, FontAwesomeIcons.LockOpen },
        { IconName.Mail, FontAwesomeIcons.Envelope },
        { IconName.MailOpen, FontAwesomeIcons.EnvelopeOpen },
        { IconName.Map, FontAwesomeIcons.Map },
        { IconName.MapMarker, FontAwesomeIcons.MapMarker },
        { IconName.MapMarkerAlt, FontAwesomeIcons.MapMarkedAlt },
        { IconName.Memory, FontAwesomeIcons.Memory },
        { IconName.Microphone, FontAwesomeIcons.Microphone },
        { IconName.MicrophoneSlash, FontAwesomeIcons.MicrophoneSlash },
        { IconName.MinusCircle, FontAwesomeIcons.MinusCircle },
        { IconName.MinusSquare, FontAwesomeIcons.MinusSquare },
        { IconName.MoneyBillAlt, FontAwesomeIcons.MoneyBillAlt },
        { IconName.MoreHorizontal, FontAwesomeIcons.EllipsisH },
        { IconName.MoreVertical, FontAwesomeIcons.EllipsisV },
        { IconName.Motorcycle, FontAwesomeIcons.Motorcycle },
        { IconName.Mouse, FontAwesomeIcons.Mouse },
        { IconName.Music, FontAwesomeIcons.Music },
        { IconName.PaintBrush, FontAwesomeIcons.PaintBrush },
        { IconName.PaintRoller, FontAwesomeIcons.PaintRoller },
        { IconName.Palette, FontAwesomeIcons.Palette },
        { IconName.Paperclip, FontAwesomeIcons.Paperclip },
        { IconName.PaperPlane, FontAwesomeIcons.PaperPlane },
        { IconName.Parking, FontAwesomeIcons.Parking },
        { IconName.Paste, FontAwesomeIcons.Paste },
        { IconName.Pause, FontAwesomeIcons.Pause },
        { IconName.PauseCircle, FontAwesomeIcons.PauseCircle },
        { IconName.Pen, FontAwesomeIcons.Pen },
        { IconName.Phone, FontAwesomeIcons.Phone },
        { IconName.PhoneAlt, FontAwesomeIcons.PhoneAlt },
        { IconName.PizzaSlice, FontAwesomeIcons.PizzaSlice },
        { IconName.Plane, FontAwesomeIcons.Plane },
        { IconName.PlaneArrival, FontAwesomeIcons.PlaneArrival },
        { IconName.PlaneDeparture, FontAwesomeIcons.PlaneDeparture },
        { IconName.Play, FontAwesomeIcons.Play },
        { IconName.PlayCircle, FontAwesomeIcons.PlayCircle },
        { IconName.Plug, FontAwesomeIcons.Plug },
        { IconName.PlusCircle, FontAwesomeIcons.PlusCircle },
        { IconName.PlusSquare, FontAwesomeIcons.PlusSquare },
        { IconName.Poll, FontAwesomeIcons.Poll },
        { IconName.Portrait, FontAwesomeIcons.Portrait },
        { IconName.Print, FontAwesomeIcons.Print },
        { IconName.PuzzlePiece, FontAwesomeIcons.PuzzlePiece },
        { IconName.QuestionCircle, FontAwesomeIcons.QuestionCircle },
        { IconName.QuoteRight, FontAwesomeIcons.QuoteRight },
        { IconName.Random, FontAwesomeIcons.Random },
        { IconName.Receipt, FontAwesomeIcons.Receipt },
        { IconName.Redo, FontAwesomeIcons.Redo },
        { IconName.Remove, FontAwesomeIcons.Minus },
        { IconName.RemoveFormat, FontAwesomeIcons.RemoveFormat },
        { IconName.Reply, FontAwesomeIcons.Reply },
        { IconName.ReplyAll, FontAwesomeIcons.ReplyAll },
        { IconName.Restroom, FontAwesomeIcons.Restroom },
        { IconName.Rss, FontAwesomeIcons.Rss },
        { IconName.RulerHorizontal, FontAwesomeIcons.RulerHorizontal },
        { IconName.Running, FontAwesomeIcons.Running },
        { IconName.Satellite, FontAwesomeIcons.Satellite },
        { IconName.Save, FontAwesomeIcons.Save },
        { IconName.School, FontAwesomeIcons.School },
        { IconName.Screenshot, FontAwesomeIcons.Desktop },
        { IconName.SdCard, FontAwesomeIcons.SdCard },
        { IconName.Search, FontAwesomeIcons.Search },
        { IconName.SearchMinus, FontAwesomeIcons.SearchMinus },
        { IconName.SearchPlus, FontAwesomeIcons.SearchPlus },
        { IconName.Seedling, FontAwesomeIcons.Seedling },
        { IconName.Send, FontAwesomeIcons.PaperPlane },
        { IconName.Server, FontAwesomeIcons.Server },
        { IconName.Settings, FontAwesomeIcons.Cog },
        { IconName.Shapes, FontAwesomeIcons.Shapes },
        { IconName.Share, FontAwesomeIcons.Share },
        { IconName.ShareAlt, FontAwesomeIcons.ShareAlt },
        { IconName.Shield, FontAwesomeIcons.ShieldAlt },
        { IconName.ShieldAlt, FontAwesomeIcons.UserShield },
        { IconName.Ship, FontAwesomeIcons.Ship },
        { IconName.ShoppingBag, FontAwesomeIcons.ShoppingBag },
        { IconName.ShoppingBasket, FontAwesomeIcons.ShoppingBasket },
        { IconName.ShoppingCart, FontAwesomeIcons.ShoppingCart },
        { IconName.ShuttleVan, FontAwesomeIcons.ShuttleVan },
        { IconName.SimCard, FontAwesomeIcons.SimCard },
        { IconName.SliderHorizontal, FontAwesomeIcons.SlidersH },
        { IconName.Smartphone, FontAwesomeIcons.Mobile },
        { IconName.Smile, FontAwesomeIcons.Smile },
        { IconName.Smoking, FontAwesomeIcons.Smoking },
        { IconName.SmokingBan, FontAwesomeIcons.SmokingBan },
        { IconName.Sms, FontAwesomeIcons.Sms },
        { IconName.Snowflake, FontAwesomeIcons.Snowflake },
        { IconName.Sort, FontAwesomeIcons.Sort },
        { IconName.SortAlphaDown, FontAwesomeIcons.SortAlphaDown },
        { IconName.SortAlphaUp, FontAwesomeIcons.SortAlphaUp },
        { IconName.SortAmountDownAlt, FontAwesomeIcons.SortAmountDownAlt },
        { IconName.SortDown, FontAwesomeIcons.SortDown },
        { IconName.SortUp, FontAwesomeIcons.SortUp },
        { IconName.Spa, FontAwesomeIcons.Spa },
        { IconName.SpellCheck, FontAwesomeIcons.SpellCheck },
        { IconName.Square, FontAwesomeIcons.Square },
        { IconName.Star, FontAwesomeIcons.Star },
        { IconName.StarHalf, FontAwesomeIcons.StarHalf },
        { IconName.StepBackward, FontAwesomeIcons.StepBackward },
        { IconName.StepForward, FontAwesomeIcons.StepForward },
        { IconName.StickyNote, FontAwesomeIcons.StickyNote },
        { IconName.Stop, FontAwesomeIcons.Stop },
        { IconName.Store, FontAwesomeIcons.Store },
        { IconName.StoreAlt, FontAwesomeIcons.StoreAlt },
        { IconName.Stream, FontAwesomeIcons.Stream },
        { IconName.StreetView, FontAwesomeIcons.StreetView },
        { IconName.Strikethrough, FontAwesomeIcons.Strikethrough },
        { IconName.Subscript, FontAwesomeIcons.Subscript },
        { IconName.Subway, FontAwesomeIcons.Subway },
        { IconName.Suitcase, FontAwesomeIcons.Suitcase },
        { IconName.Sun, FontAwesomeIcons.Sun },
        { IconName.Superscript, FontAwesomeIcons.Superscript },
        { IconName.SwimmingPool, FontAwesomeIcons.SwimmingPool },
        { IconName.Sync, FontAwesomeIcons.Sync },
        { IconName.SyncAlt, FontAwesomeIcons.SyncAlt },
        { IconName.Table, FontAwesomeIcons.Table },
        { IconName.Tablet, FontAwesomeIcons.Tablet },
        { IconName.Tag, FontAwesomeIcons.Tag },
        { IconName.Taxi, FontAwesomeIcons.Taxi },
        { IconName.TextHeight, FontAwesomeIcons.TextHeight },
        { IconName.ThumbsDown, FontAwesomeIcons.ThumbsDown },
        { IconName.ThumbsUp, FontAwesomeIcons.ThumbsUp },
        { IconName.Ticket, FontAwesomeIcons.TicketAlt },
        { IconName.TicketAlt, FontAwesomeIcons.TicketAlt },
        { IconName.Times, FontAwesomeIcons.Times },
        { IconName.TimesCircle, FontAwesomeIcons.TimesCircle },
        { IconName.Tint, FontAwesomeIcons.Tint },
        { IconName.TintSlash, FontAwesomeIcons.TintSlash },
        { IconName.TrafficLight, FontAwesomeIcons.TrafficLight },
        { IconName.Train, FontAwesomeIcons.Train },
        { IconName.Tram, FontAwesomeIcons.Tram },
        { IconName.Tree, FontAwesomeIcons.Tree },
        { IconName.Truck, FontAwesomeIcons.Truck },
        { IconName.Tv, FontAwesomeIcons.Tv },
        { IconName.UmbrellaBeach, FontAwesomeIcons.UmbrellaBeach },
        { IconName.Underline, FontAwesomeIcons.Underline },
        { IconName.Undo, FontAwesomeIcons.Undo },
        { IconName.Unlock, FontAwesomeIcons.Unlock },
        { IconName.User, FontAwesomeIcons.User },
        { IconName.UserCheck, FontAwesomeIcons.UserCheck },
        { IconName.UserCircle, FontAwesomeIcons.UserCircle },
        { IconName.UserFriends, FontAwesomeIcons.UserFriends },
        { IconName.UserPlus, FontAwesomeIcons.UserPlus },
        { IconName.Users, FontAwesomeIcons.Users },
        { IconName.UserTie, FontAwesomeIcons.UserTie },
        { IconName.Utensils, FontAwesomeIcons.Utensils },
        { IconName.Video, FontAwesomeIcons.Video },
        { IconName.VideoSlash, FontAwesomeIcons.VideoSlash },
        { IconName.Voicemail, FontAwesomeIcons.Voicemail },
        { IconName.VolumeDown, FontAwesomeIcons.VolumeDown },
        { IconName.VolumeMute, FontAwesomeIcons.VolumeMute },
        { IconName.VolumeOff, FontAwesomeIcons.VolumeOff },
        { IconName.VolumeUp, FontAwesomeIcons.VolumeUp },
        { IconName.Walking, FontAwesomeIcons.Walking },
        { IconName.Wallet, FontAwesomeIcons.Wallet },
        { IconName.Wheelchair, FontAwesomeIcons.Wheelchair },
        { IconName.Wifi, FontAwesomeIcons.Wifi },
        { IconName.WineBottle, FontAwesomeIcons.WineBottle },
        { IconName.Wrench, FontAwesomeIcons.Wrench },
        { IconName.Zoom, FontAwesomeIcons.Search },
        { IconName.ZoomIn, FontAwesomeIcons.SearchMinus },
        { IconName.ZoomOut, FontAwesomeIcons.SearchPlus },
    };

    private static Dictionary<IconStyle, string> styles = new()
    {
        { IconStyle.Solid, "fas" },
        { IconStyle.Regular, "far" },
        { IconStyle.Light, "fal" },
        { IconStyle.DuoTone, "fad" },
    };

    #endregion

    #region Methods

    public override string IconSize( IconSize iconSize )
    {
        return iconSize switch
        {
            Blazorise.IconSize.ExtraSmall => "fa-xs",
            Blazorise.IconSize.Small => "fa-sm",
            Blazorise.IconSize.Large => "fa-lg",
            Blazorise.IconSize.x2 => "fa-2x",
            Blazorise.IconSize.x3 => "fa-3x",
            Blazorise.IconSize.x4 => "fa-4x",
            Blazorise.IconSize.x5 => "fa-5x",
            Blazorise.IconSize.x6 => "fa-6x",
            Blazorise.IconSize.x7 => "fa-7x",
            Blazorise.IconSize.x8 => "fa-8x",
            Blazorise.IconSize.x9 => "fa-9x",
            Blazorise.IconSize.x10 => "fa-10x",
            _ => null,
        };
    }

    public override string GetIconName( IconName iconName, IconStyle iconStyle )
    {
        names.TryGetValue( iconName, out var name );

        return name;
    }

    public override void SetIconName( IconName name, string newName )
    {
        names[name] = newName;
    }

    public override string GetStyleName( IconStyle iconStyle )
    {
        if ( styles.TryGetValue( iconStyle, out var style ) )
            return style;

        return null;
    }

    protected override bool ContainsStyleName( string iconName )
    {
        return iconName.Split( ' ' ).Any( x => styles.Values.Contains( x ) || new string[] { "fab" }.Contains( x ) );
    }

    #endregion

    #region Properties

    public override bool IconNameAsContent => false;

    #endregion
}